import pandas as pd

class TestCaseData():

    def __init__(self,filename,sheet_id=0):
        '''
        定义初始化函数
        :param filename: 测试用例文件路径
        :param sheet_id: 工作簿的索引，从0开始，默认为0
        '''
        self.filename = filename
        self.df = pd.read_excel(filename,sheet_name=sheet_id)
        self.df2 = self.df.iloc[:,[2,3,4,5,6,7,8,9,10]]
        self.df2.columns = ['rely_id','is_token','url', 'keys', 'data', 'method', 'status_code', 'code', 'msg']

    def get_case_data(self):
        '''
        读取测试用例的数据
        :return: 返回一个列表，列表里面的每个元素都是字典，字典里面包含需要的数据
        '''
        # 从整个excel里面取出指定列的数据
        # df2 = self.df.iloc[:,[3,4,5,6,7,8,9]]
        # 对数据的列名进行更改
        # df2.columns = ['url','keys','data','method','status_code','code','msg']
        data_list = []
        for i in self.df2.index:
            # 取出每一行的数据，并且转为字典
            data = self.df2.iloc[i].to_dict()
            data_list.append(data)
        return data_list

    def get_case_by_id(self,case_id):
        '''
        根据测试用例id查找测试用例数据
        :param case_id: 测试用例id
        :return: 对应id的测试用例数据
        '''
        # 测试用例的id，也就是测试用例的行号，在DataFrame里面，index是行号的索引，从0开始
        # 因此我们通过索引取值的时候，用例的id要减1
        return self.df2.iloc[case_id-1].to_dict()

    def save_case_result(self,column,result):
        # 向已经打开的测试用例里面，指定的列写入数据
        # self.df['运行结果'] = ['pass','fail','pass']
        self.df[column] = result
        # 将结果保存到本地
        self.df.to_excel(r'D:\pythonProject1\django_web_token\jwt_demo\cs_jiekou\result.xlsx')
        # pass